\chapter{Mac OS 使用}

\section{常用操作}

\subsection{快捷键中的符号分别代表什么} % (fold)
\label{sub:快捷键中的符号分别代表什么}
快捷键中常用符号⌘（command）、⌥（option）、⇧（shift）、⇪（caps lock）、⌃（control）、↩（return）、⌅（enter）。
% subsection 快捷键中的符号分别代表什么 (end)

\subsection{如何剪切文件} % (fold)
\label{sub:如何剪切文件}

command + option + v

% subsection 如何剪切文件 (end)
\subsection{删除文件} % (fold)
\label{sub:删除文件}

\subsubsection{如何删除文件} % (fold)
\label{ssub:如何删除文件}
Ctrl＋ Delete，即可将文件放入废纸篓。清空废纸篓(不提示) Command + Option + Shift + Delete。
删除软件也可以使用同样的操作。

% subsubsection 如何删除文件 (end)
\subsubsection{如何遍历子目录并删除指定文件} % (fold)
\label{ssub:如何遍历子目录并删除指定文件}
使用find命令，而不是rm命令。
\begin{lstlisting}
find . -name '*.aux' -delete
\end{lstlisting}
% subsubsection 如何遍历子目录并删除指定文件 (end)
% subsection 删除文件 (end)

\subsubsection{如何设定快捷键} % (fold)
\label{ssub:如何设定快捷键}
常用功能都用快捷键。为保持与windows同样的操作习惯，减少鼠标点击，我们有必要修改快捷键。打开“系统偏好设置…”，在设置面板里选择 “键盘”，切到 “键盘快捷键” 标签，即可设定全局性的快捷键，也可为特定软件的特定菜单功能设定快捷键。

Mac OS 考虑到Windows 用户的习惯，允许用户修改修饰键，如用Ctrl代替Command。
% subsubsection 如何设定快捷键 (end)

\subsubsection{如何进行VPN设置} % (fold)
\label{ssub:如何进行vpn设置}
“系统偏好设置…”，选择“网络”，添加VPN设置，选择合适的协议，输入账号信息即可。
% subsubsection 如何进行vpn设置 (end)

\subsubsection{如何快速启动终端} % (fold)
\label{ssub:如何快速启动终端}
使用快捷键启动spotlight，然后搜索“终端”或者“terminal”。
% subsubsection 如何快速启动终端 (end)
\subsubsection{系统备份} % (fold)
\label{ssub:系统备份}
Time Machine 会自动备份整个 Mac，包括系统文件、应用软件、帐户、偏好设置、电子邮件、音乐、照片、影片和文稿。而 Time Machine 与其他备份应用软件的区别在于它不仅能备份所有文件，还能够记住系统在任意一天的状态，因此您可以重新回到过去某个时段的 Mac。Time Machine 会保留过去 24 小时的每小时备份、过去一个月的每日备份及每周备份，备份驱动器已满后会自动删除旧的备份，保证备份的持续进行。
% subsubsection 系统备份 (end)
\subsubsection{如何安装字体} % (fold)
\label{ssub:如何安装字体}
与windows类似，下载字体后，双击即可安装。
% subsubsection 如何安装字体 (end)

\subsubsection{如何在finder中显示路径名称} % (fold)
\label{ssub:如何在finder中显示路径名称}
在finder中选择“显示”菜单中的“显示／隐藏路径栏”选项。
% subsubsection 如何在finder中显示路径名称 (end)

\subsection{如何更改文件的默认打开方式} % (fold)
\label{sub:如何更改文件的默认打开方式}
右键点击你要修改地文件->显示简介->打开方式->选择了新的程序之后->全部更改.
% subsection 如何更改文件的默认打开方式 (end)

\subsection{如何在shell脚本中调用函数} % (fold)
\label{sub:如何在shell脚本中调用函数}

\begin{lstlisting}
sh /directory/script.sh
\end{lstlisting}

shell中包含执行命令，那么子命令并不影响父级的命令，在子命令执行完后再执行父级命令。子级的环境变量不会影响到父级。

这种调用方式为fork，是最常用的调用方式, 就是直接在脚本里面调用script.sh这个脚本。运行的时候开一个sub-shell执行调用的脚本，sub-shell执行的时候，parent-shell还在。sub-shell执行完毕后返回parent-shell，sub-shell从parent-shell继承环境变量，但是sub-shell中的环境变量不会带回parent-shell。
\subsection{如何执行脚本} % (fold)
\label{sub:如何执行脚本}
执行当前文件夹中的脚本之前，需要赋予脚本可执行的权限：

\begin{lstlisting}
chmod +x scriptname.sh
\end{lstlisting}

然后在当前文件夹中执行：

\begin{lstlisting}
./scrptname.sh
\end{lstlisting}

\subsection{执行脚本时出现No such file or directory} % (fold)
\label{sub:执行脚本时出现no_such_file_or_directory}
执行.sh文件，提示No such file or directory的问题，其中一个原因是使用windows换行格式保存过文件，将其换行格式调整为unix格式即可：

\begin{lstlisting}
vim desc.sh
:set ff=unix
:wq
\end{lstlisting}

% subsection 执行脚本时出现no_such_file_or_directory (end)
\section{MacTex 设定} % (fold)
\label{sec:mactex_设定}
LaTex的核心在于其命令行工具，故而MacTex 与Windows 版本的绝大部分操作都类似。
\subsubsection{如何使用命令行编译tex文件} % (fold)
\label{ssub:如何使用命令行编译tex文件}
编译tex文件：

\begin{lstlisting}
xelatex LearningMac.tex
\end{lstlisting}

如何通过命令行预览pdf

\begin{lstlisting}
open -a Preview xxx.pdf
\end{lstlisting}

Preview 程序会锁定PDF文件，当重新生成PDF文件再次预览时，通常会跳转到首页，选择单页显示\code{Command＋2}，则可避免这种情况的出现。

% subsubsection 如何使用命令行编译tex文件 (end)

\subsubsection{如何更新MacTex} % (fold)
\label{ssub:如何更新mactex}

\begin{lstlisting}
sudo tlmgr update --self
sudo tlmgr update --all
\end{lstlisting}


% subsubsection 如何更新mactex (end)

\section{Sublime Text 的设定} % (fold)
Sublime Text 的Mac版本中，一些快捷键与windows版本有所区别，可按照习惯进行定制。
\subsection{如何在命令行中执行subl} % (fold)
\label{sub:如何在命令行中执行subl}
\begin{enumerate}
	\item 添加link

	\begin{lstlisting}
	ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl
	\end{lstlisting}
	\item 编辑PATH

	\begin{lstlisting}
	vim ~/.bash_profile
	\end{lstlisting}
	\item 添加PATH

	\begin{lstlisting}
	export PATH=/usr/local/bin:$PATH
	\end{lstlisting}
	\item 应用

	\begin{lstlisting}
	source ~/.bash_profile
	\end{lstlisting}

\end{enumerate}

\section{PHP开发环境的设置} % (fold)
\label{sec:php开发环境的设置}
快速搭建PHP开发环境的方法有很多，常使用集成开发环境，如XAMPP、MAPP等等。
\subsection{cURL中使用OpenSSL} % (fold)
\label{sub:curl中使用openssl}

% subsection curl中使用openssl (end)
在OS X的最近版本中，PHP的cURL扩展使用OS自带的协议，而非openssl，导致curl的https功能无法使用，解决办法是使用openssl替代。

\begin{enumerate}
	\item 从\href{https://www.openssl.org/source/}{https://www.openssl.org/source/}下载OpenSSL并解压缩至<your\_dir>/openssl。
	\item 进入到解压后的目录：

	\begin{lstlisting}
	cd <your_dir>/openssl
	\end{lstlisting}

	\item 设置编译参数：

	\begin{lstlisting}
	./Configure darwin64-x86_64-cc --prefix=/usr
	\end{lstlisting}

	\item 编译
	 \begin{lstlisting}
	 make clean && make && sudo make install
	 \end{lstlisting}
\end{enumerate}

OpenSSL会被安装至/usr并替换掉之前的版本。

\subsection{OS X中临时文件夹的读取存储权限} % (fold)
\label{sub:os_x中临时文件夹的读取存储权限}

在Mac OS中，一般用户的读写权限是受到限制的，这样下列代码就无法得到预期的效果：

\begin{lstlisting}
tempnam(sys_get_temp_dir(),'test');
\end{lstlisting}

解决的办法是，在finder中更改临时文件夹的权限，使得任何人都可以读取即可。
